Index: /trunk/tools/Templates/HeuristicLab.VS2010Wizards.Test/Program.cs
===================================================================
--- /trunk/tools/Templates/HeuristicLab.VS2010Wizards.Test/Program.cs	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLab.VS2010Wizards.Test/Program.cs	(revision 4214)
@@ -13,5 +13,5 @@
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
-      Application.Run(new AlgorithmWizardForm());
+      Application.Run(new ProblemWizardForm());
     }
   }
Index: /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ParametersControl.Designer.cs
===================================================================
--- /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ParametersControl.Designer.cs	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ParametersControl.Designer.cs	(revision 4214)
@@ -158,4 +158,7 @@
             "Lookup",
             "ValueLookup",
+            "OptionalValue",
+            "ConstrainedValue",
+            "OptionalConstrainedValue",
             "ScopeTreeLookup"});
       this.parameterTypeComboBox.Location = new System.Drawing.Point(3, 232);
Index: /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizard.cs
===================================================================
--- /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizard.cs	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizard.cs	(revision 4214)
@@ -49,8 +49,8 @@
         replacementsDictionary.Add("$problemName$", form.ProblemName);
         replacementsDictionary.Add("$problemDescription$", form.ProblemDescription);
-        replacementsDictionary.Add("$problemType$", ((form.IsMultiObjective) ? ("Multi") : ("Single")));
-        replacementsDictionary.Add("$maximizationParameterProperty$", "TODO");
-        replacementsDictionary.Add("$solutionCreatorParameterProperty$", "TODO");
-        replacementsDictionary.Add("$evaluatorParameterProperty$", "TODO");
+        replacementsDictionary.Add("$problemTypeImplementation$", form.ProblemTypeImplementation);
+        replacementsDictionary.Add("$problemSpecificParameterProperties$", form.ProblemSpecificParameterProperties);
+        replacementsDictionary.Add("$problemSpecificProperties$", form.ProblemSpecificProperties);
+        replacementsDictionary.Add("$problemSpecificParameterInitializers$", form.ProblemSpecificParameterInitializers);
         replacementsDictionary.Add("$parameterProperties$", form.ParameterProperties);
         replacementsDictionary.Add("$properties$", form.Properties);
Index: /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizardForm.Designer.cs
===================================================================
--- /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizardForm.Designer.cs	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizardForm.Designer.cs	(revision 4214)
@@ -28,5 +28,5 @@
       this.label2 = new System.Windows.Forms.Label();
       this.problemDescriptionTextBox = new System.Windows.Forms.TextBox();
-      this.isMultiObjectiveCheckBox = new System.Windows.Forms.CheckBox();
+      this.multiObjectiveCheckBox = new System.Windows.Forms.CheckBox();
       this.problemNameTextBox = new System.Windows.Forms.TextBox();
       this.cancelButton = new System.Windows.Forms.Button();
@@ -37,13 +37,20 @@
       this.page2Panel = new System.Windows.Forms.Panel();
       this.label3 = new System.Windows.Forms.Label();
-      this.parametersControl = new HeuristicLab.VS2010Wizards.ParametersControl();
       this.panel2 = new System.Windows.Forms.Panel();
       this.nextButton = new System.Windows.Forms.Button();
       this.previousButton = new System.Windows.Forms.Button();
       this.page1Panel = new System.Windows.Forms.Panel();
+      this.singleObjectiveCheckBox = new System.Windows.Forms.CheckBox();
+      this.contentPanel = new System.Windows.Forms.Panel();
+      this.solutionCreatorTypeTextBox = new System.Windows.Forms.TextBox();
+      this.evaluatorTypeTextBox = new System.Windows.Forms.TextBox();
+      this.label6 = new System.Windows.Forms.Label();
+      this.label5 = new System.Windows.Forms.Label();
+      this.parametersControl = new HeuristicLab.VS2010Wizards.ParametersControl();
       this.panel1.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
       this.page2Panel.SuspendLayout();
       this.page1Panel.SuspendLayout();
+      this.contentPanel.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -52,5 +59,5 @@
       this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(100, 48);
+      this.label1.Location = new System.Drawing.Point(100, 19);
       this.label1.Name = "label1";
       this.label1.Size = new System.Drawing.Size(38, 13);
@@ -62,5 +69,5 @@
       this.label2.Anchor = System.Windows.Forms.AnchorStyles.None;
       this.label2.AutoSize = true;
-      this.label2.Location = new System.Drawing.Point(100, 96);
+      this.label2.Location = new System.Drawing.Point(100, 67);
       this.label2.Name = "label2";
       this.label2.Size = new System.Drawing.Size(63, 13);
@@ -71,25 +78,26 @@
       // 
       this.problemDescriptionTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.problemDescriptionTextBox.Location = new System.Drawing.Point(102, 112);
+      this.problemDescriptionTextBox.Location = new System.Drawing.Point(103, 83);
       this.problemDescriptionTextBox.Multiline = true;
       this.problemDescriptionTextBox.Name = "problemDescriptionTextBox";
-      this.problemDescriptionTextBox.Size = new System.Drawing.Size(469, 63);
+      this.problemDescriptionTextBox.Size = new System.Drawing.Size(468, 63);
       this.problemDescriptionTextBox.TabIndex = 3;
       // 
-      // isMultiObjectiveCheckBox
-      // 
-      this.isMultiObjectiveCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.isMultiObjectiveCheckBox.AutoSize = true;
-      this.isMultiObjectiveCheckBox.Location = new System.Drawing.Point(102, 188);
-      this.isMultiObjectiveCheckBox.Name = "isMultiObjectiveCheckBox";
-      this.isMultiObjectiveCheckBox.Size = new System.Drawing.Size(96, 17);
-      this.isMultiObjectiveCheckBox.TabIndex = 5;
-      this.isMultiObjectiveCheckBox.Text = "Multi-Objective";
-      this.isMultiObjectiveCheckBox.UseVisualStyleBackColor = true;
+      // multiObjectiveCheckBox
+      // 
+      this.multiObjectiveCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.multiObjectiveCheckBox.AutoSize = true;
+      this.multiObjectiveCheckBox.Location = new System.Drawing.Point(212, 152);
+      this.multiObjectiveCheckBox.Name = "multiObjectiveCheckBox";
+      this.multiObjectiveCheckBox.Size = new System.Drawing.Size(96, 17);
+      this.multiObjectiveCheckBox.TabIndex = 5;
+      this.multiObjectiveCheckBox.Text = "Multi-Objective";
+      this.multiObjectiveCheckBox.UseVisualStyleBackColor = true;
+      this.multiObjectiveCheckBox.CheckedChanged += new System.EventHandler(this.multiObjectiveCheckBox_CheckedChanged);
       // 
       // problemNameTextBox
       // 
       this.problemNameTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
-      this.problemNameTextBox.Location = new System.Drawing.Point(103, 64);
+      this.problemNameTextBox.Location = new System.Drawing.Point(103, 35);
       this.problemNameTextBox.Name = "problemNameTextBox";
       this.problemNameTextBox.Size = new System.Drawing.Size(468, 20);
@@ -152,12 +160,10 @@
       // page2Panel
       // 
-      this.page2Panel.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.page2Panel.Controls.Add(this.label3);
       this.page2Panel.Controls.Add(this.parametersControl);
-      this.page2Panel.Location = new System.Drawing.Point(0, 86);
+      this.page2Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.page2Panel.Location = new System.Drawing.Point(0, 0);
       this.page2Panel.Name = "page2Panel";
-      this.page2Panel.Size = new System.Drawing.Size(676, 289);
+      this.page2Panel.Size = new System.Drawing.Size(676, 293);
       this.page2Panel.TabIndex = 10;
       this.page2Panel.Visible = false;
@@ -171,14 +177,4 @@
       this.label3.TabIndex = 1;
       this.label3.Text = "Parameters:";
-      // 
-      // parametersControl
-      // 
-      this.parametersControl.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.parametersControl.Location = new System.Drawing.Point(0, 33);
-      this.parametersControl.Name = "parametersControl";
-      this.parametersControl.Size = new System.Drawing.Size(676, 256);
-      this.parametersControl.TabIndex = 0;
       // 
       // panel2
@@ -218,16 +214,95 @@
       // page1Panel
       // 
-      this.page1Panel.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.page1Panel.Controls.Add(this.solutionCreatorTypeTextBox);
+      this.page1Panel.Controls.Add(this.evaluatorTypeTextBox);
+      this.page1Panel.Controls.Add(this.label6);
+      this.page1Panel.Controls.Add(this.label5);
       this.page1Panel.Controls.Add(this.label1);
       this.page1Panel.Controls.Add(this.label2);
       this.page1Panel.Controls.Add(this.problemDescriptionTextBox);
       this.page1Panel.Controls.Add(this.problemNameTextBox);
-      this.page1Panel.Controls.Add(this.isMultiObjectiveCheckBox);
-      this.page1Panel.Location = new System.Drawing.Point(0, 86);
+      this.page1Panel.Controls.Add(this.singleObjectiveCheckBox);
+      this.page1Panel.Controls.Add(this.multiObjectiveCheckBox);
+      this.page1Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.page1Panel.Location = new System.Drawing.Point(0, 0);
       this.page1Panel.Name = "page1Panel";
-      this.page1Panel.Size = new System.Drawing.Size(676, 298);
+      this.page1Panel.Size = new System.Drawing.Size(676, 293);
       this.page1Panel.TabIndex = 9;
+      // 
+      // singleObjectiveCheckBox
+      // 
+      this.singleObjectiveCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.singleObjectiveCheckBox.AutoSize = true;
+      this.singleObjectiveCheckBox.Checked = true;
+      this.singleObjectiveCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.singleObjectiveCheckBox.Location = new System.Drawing.Point(103, 152);
+      this.singleObjectiveCheckBox.Name = "singleObjectiveCheckBox";
+      this.singleObjectiveCheckBox.Size = new System.Drawing.Size(103, 17);
+      this.singleObjectiveCheckBox.TabIndex = 5;
+      this.singleObjectiveCheckBox.Text = "Single-Objective";
+      this.singleObjectiveCheckBox.UseVisualStyleBackColor = true;
+      this.singleObjectiveCheckBox.CheckedChanged += new System.EventHandler(this.singleObjectiveCheckBox_CheckedChanged);
+      // 
+      // contentPanel
+      // 
+      this.contentPanel.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.contentPanel.Controls.Add(this.page1Panel);
+      this.contentPanel.Controls.Add(this.page2Panel);
+      this.contentPanel.Location = new System.Drawing.Point(0, 85);
+      this.contentPanel.Name = "contentPanel";
+      this.contentPanel.Size = new System.Drawing.Size(676, 293);
+      this.contentPanel.TabIndex = 11;
+      // 
+      // solutionCreatorTypeTextBox
+      // 
+      this.solutionCreatorTypeTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.solutionCreatorTypeTextBox.Location = new System.Drawing.Point(103, 236);
+      this.solutionCreatorTypeTextBox.Name = "solutionCreatorTypeTextBox";
+      this.solutionCreatorTypeTextBox.Size = new System.Drawing.Size(468, 20);
+      this.solutionCreatorTypeTextBox.TabIndex = 8;
+      this.solutionCreatorTypeTextBox.Text = "IMyProblemSolutionCreator";
+      this.solutionCreatorTypeTextBox.TextChanged += new System.EventHandler(this.solutionCreatorTypeTextBox_TextChanged);
+      // 
+      // evaluatorTypeTextBox
+      // 
+      this.evaluatorTypeTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.evaluatorTypeTextBox.Location = new System.Drawing.Point(103, 197);
+      this.evaluatorTypeTextBox.Name = "evaluatorTypeTextBox";
+      this.evaluatorTypeTextBox.Size = new System.Drawing.Size(468, 20);
+      this.evaluatorTypeTextBox.TabIndex = 9;
+      this.evaluatorTypeTextBox.Text = "IMyProblemEvaluator";
+      this.evaluatorTypeTextBox.TextChanged += new System.EventHandler(this.evaluatorTypeTextBox_TextChanged);
+      // 
+      // label6
+      // 
+      this.label6.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(100, 220);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(112, 13);
+      this.label6.TabIndex = 6;
+      this.label6.Text = "Solution Creator Type:";
+      // 
+      // label5
+      // 
+      this.label5.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(100, 181);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(82, 13);
+      this.label5.TabIndex = 7;
+      this.label5.Text = "Evaluator Type:";
+      // 
+      // parametersControl
+      // 
+      this.parametersControl.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.parametersControl.Location = new System.Drawing.Point(0, 33);
+      this.parametersControl.Name = "parametersControl";
+      this.parametersControl.Size = new System.Drawing.Size(676, 260);
+      this.parametersControl.TabIndex = 0;
       // 
       // ProblemWizardForm
@@ -236,4 +311,5 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.ClientSize = new System.Drawing.Size(676, 428);
+      this.Controls.Add(this.contentPanel);
       this.Controls.Add(this.panel1);
       this.Controls.Add(this.cancelButton);
@@ -242,6 +318,4 @@
       this.Controls.Add(this.finishButton);
       this.Controls.Add(this.panel2);
-      this.Controls.Add(this.page2Panel);
-      this.Controls.Add(this.page1Panel);
       this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
       this.Name = "ProblemWizardForm";
@@ -254,4 +328,5 @@
       this.page1Panel.ResumeLayout(false);
       this.page1Panel.PerformLayout();
+      this.contentPanel.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -263,5 +338,5 @@
     private System.Windows.Forms.Label label2;
     private System.Windows.Forms.TextBox problemDescriptionTextBox;
-    private System.Windows.Forms.CheckBox isMultiObjectiveCheckBox;
+    private System.Windows.Forms.CheckBox multiObjectiveCheckBox;
     private System.Windows.Forms.TextBox problemNameTextBox;
     private System.Windows.Forms.Button cancelButton;
@@ -277,4 +352,10 @@
     private ParametersControl parametersControl;
     private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.CheckBox singleObjectiveCheckBox;
+    private System.Windows.Forms.Panel contentPanel;
+    private System.Windows.Forms.TextBox solutionCreatorTypeTextBox;
+    private System.Windows.Forms.TextBox evaluatorTypeTextBox;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label label5;
   }
 }
Index: /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizardForm.cs
===================================================================
--- /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizardForm.cs	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLab.VS2010Wizards/ProblemWizardForm.cs	(revision 4214)
@@ -18,4 +18,8 @@
       private set;
     }
+    public bool IsSingleObjective {
+      get;
+      private set;
+    }
     public bool IsMultiObjective {
       get;
@@ -31,4 +35,28 @@
     }
     public string ParameterInitializers {
+      get;
+      private set;
+    }
+    public string EvaluatorType {
+      get;
+      private set;
+    }
+    public string SolutionCreatorType {
+      get;
+      private set;
+    }
+    public string ProblemTypeImplementation {
+      get;
+      private set;
+    }
+    public string ProblemSpecificParameterProperties {
+      get;
+      private set;
+    }
+    public string ProblemSpecificProperties {
+      get;
+      private set;
+    }
+    public string ProblemSpecificParameterInitializers {
       get;
       private set;
@@ -37,4 +65,8 @@
     public ProblemWizardForm() {
       InitializeComponent();
+      IsSingleObjective = singleObjectiveCheckBox.Checked;
+      IsMultiObjective = multiObjectiveCheckBox.Checked;
+      EvaluatorType = evaluatorTypeTextBox.Text;
+      SolutionCreatorType = solutionCreatorTypeTextBox.Text;
     }
 
@@ -53,8 +85,125 @@
       ProblemName = problemNameTextBox.Text;
       ProblemDescription = problemDescriptionTextBox.Text;
-      IsMultiObjective = isMultiObjectiveCheckBox.Checked;
-      ParameterProperties = parametersControl.GetParameterProperties("private");
+      IsMultiObjective = multiObjectiveCheckBox.Checked;
+      ParameterProperties = parametersControl.GetParameterProperties("public");
       Properties = parametersControl.GetProperties("public");
       ParameterInitializers = parametersControl.GetInitializers();
+
+      if (IsMultiObjective && IsSingleObjective) {
+        ProblemTypeImplementation = "ISingleObjectiveProblem, IMultiObjectiveProblem";
+      } else if (IsMultiObjective) {
+        ProblemTypeImplementation = "IMultiObjectiveProblem";
+      }  else if (IsSingleObjective)
+        ProblemTypeImplementation = "ISingleObjectiveProblem";
+
+      ProblemSpecificParameterProperties = GetParamProps();
+      ProblemSpecificProperties = GetProps();
+      ProblemSpecificParameterInitializers = GetParamInitializers();
+    }
+
+    private string GetParamProps() {
+      StringBuilder builder = new StringBuilder();
+      if (IsSingleObjective) {
+        builder.Append(@"public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (OptionalValueParameter<DoubleValue>)Parameters[""BestKnownQuality""]; }
+    }
+    IParameter ISingleObjectiveProblem.BestKnownQualityParameter {
+      get { return BestKnownQualityParameter; }
+    }");
+        builder.Append(Environment.NewLine);
+        builder.Append(@"public ValueParameter<BoolValue> MaximizationParameter {
+      get { return (ValueParameter<BoolValue>)Parameters[""Maximization""]; }
+    }
+    IParameter ISingleObjectiveProblem.MaximizationParameter {
+      get { return MaximizationParameter; }
+    }");
+        builder.Append(Environment.NewLine);
+      }
+      if (IsMultiObjective) {
+        builder.Append(@" public ValueParameter<BoolArray> MultiObjectiveMaximizationParameter {
+      get { return (ValueParameter<BoolArray>)Parameters[""MultiObjectiveMaximization""]; }
+    }
+    IParameter IMultiObjectiveProblem.MaximizationParameter {
+      get { return MultiObjectiveMaximizationParameter; }
+    }");
+        builder.Append(Environment.NewLine);
+      }
+      builder.Append(@"public ValueParameter<" + SolutionCreatorType + @"> SolutionCreatorParameter {
+      get { return (ValueParameter<" + SolutionCreatorType + @">)Parameters[""SolutionCreator""]; }
+    }
+    IParameter IProblem.SolutionCreatorParameter {
+      get { return SolutionCreatorParameter; }
+    }
+    public ValueParameter<" + EvaluatorType + @"> EvaluatorParameter {
+      get { return (ValueParameter<" + EvaluatorType + @">)Parameters[""Evaluator""]; }
+    }
+    IParameter IProblem.EvaluatorParameter {
+      get { return EvaluatorParameter; }
+    }");
+      return builder.ToString();
+    }
+
+    private string GetProps() {
+      StringBuilder builder = new StringBuilder();
+      builder.Append(@"public " + SolutionCreatorType + @" SolutionCreator {
+      get { return SolutionCreatorParameter.Value; }
+      set { SolutionCreatorParameter.Value = value; }
+    }
+    ISolutionCreator IProblem.SolutionCreator {
+      get { return SolutionCreatorParameter.Value; }
+    }
+    public " + EvaluatorType + @" Evaluator {
+      get { return EvaluatorParameter.Value; }
+      set { EvaluatorParameter.Value = value; }
+    }");
+      builder.Append(Environment.NewLine);
+      if (IsSingleObjective) {
+        builder.Append(@"ISingleObjectiveEvaluator ISingleObjectiveProblem.Evaluator {
+      get { return EvaluatorParameter.Value; }
+    }");
+        builder.Append(Environment.NewLine);
+      }
+      if (IsMultiObjective) {
+        builder.Append(@"IMultiObjectiveEvaluator IMultiObjectiveProblem.Evaluator {
+      get { return EvaluatorParameter.Value; }
+    }");
+        builder.Append(Environment.NewLine);
+      }
+      builder.Append(@"IEvaluator IProblem.Evaluator {
+      get { return EvaluatorParameter.Value; }
+    }");
+      builder.Append(Environment.NewLine);
+      if (IsSingleObjective) {
+        builder.Append(@"public DoubleValue BestKnownQuality {
+      get { return BestKnownQualityParameter.Value; }
+      set { BestKnownQualityParameter.Value = value; }
+    }");
+        builder.Append(Environment.NewLine);
+      }
+      return builder.ToString();
+    }
+
+    private string GetParamInitializers() {
+      StringBuilder builder = new StringBuilder();
+      if (IsSingleObjective) {
+        builder.Append(@"Parameters.Add(new ValueParameter<BoolValue>(""Maximization"", ""TODO: Set to the false for minimization, true for maximization and add a description."", new BoolValue(false)));");
+        builder.Append(Environment.NewLine);
+      }
+      if (IsMultiObjective) {
+        builder.Append("// TODO: Change the default value to the number of objectives." + Environment.NewLine);
+        builder.Append(@"Parameters.Add(new ValueParameter<BoolArray>(""MultiObjectiveMaximization"", ""Set to false as the error of the regression model should be minimized."", new BoolArray(new bool[] {false, false})));");
+        builder.Append(Environment.NewLine);
+      }
+      builder.Append("// TODO: Add a default solution creator." + Environment.NewLine);
+      builder.Append("Parameters.Add(new ValueParameter<" + SolutionCreatorType + ">(\"SolutionCreator\", \"The operator which should be used to create new solutions.\", null));");
+      builder.Append(Environment.NewLine);
+      builder.Append("//TODO: Add a default evaluator." + Environment.NewLine);
+      builder.Append("Parameters.Add(new ValueParameter<" + EvaluatorType + ">(\"Evaluator\", \"The operator which should be used to evaluate solutions.\", null));");
+      builder.Append(Environment.NewLine);
+      if (IsSingleObjective) {
+        builder.Append("Parameters.Add(new OptionalValueParameter<DoubleValue>(\"BestKnownQuality\", \"The quality of the best known solution.\"));");
+        builder.Append(Environment.NewLine);
+      }
+      return builder.ToString();
     }
 
@@ -72,4 +221,27 @@
       nextButton.Enabled = true;
     }
+
+    private void singleObjectiveCheckBox_CheckedChanged(object sender, EventArgs e) {
+      IsSingleObjective = singleObjectiveCheckBox.Checked;
+      nextButton.Enabled = IsSingleObjective || IsMultiObjective;
+      finishButton.Enabled = nextButton.Enabled;
+    }
+    private void multiObjectiveCheckBox_CheckedChanged(object sender, EventArgs e) {
+      IsMultiObjective = multiObjectiveCheckBox.Checked;
+      nextButton.Enabled = IsSingleObjective || IsMultiObjective;
+      finishButton.Enabled = nextButton.Enabled;
+    }
+    private void problemNameTextBox_TextChanged(object sender, EventArgs e) {
+      ProblemName = problemNameTextBox.Text.Trim();
+      nextButton.Enabled = ProblemName != string.Empty;
+    }
+    private void evaluatorTypeTextBox_TextChanged(object sender, EventArgs e) {
+      EvaluatorType = evaluatorTypeTextBox.Text.Trim();
+      nextButton.Enabled = EvaluatorType != string.Empty;
+    }
+    private void solutionCreatorTypeTextBox_TextChanged(object sender, EventArgs e) {
+      SolutionCreatorType = solutionCreatorTypeTextBox.Text.Trim();
+      nextButton.Enabled = SolutionCreatorType != string.Empty;
+    }
   }
 }
Index: /trunk/tools/Templates/HeuristicLabProblemTemplate/DefaultProblem.cs
===================================================================
--- /trunk/tools/Templates/HeuristicLabProblemTemplate/DefaultProblem.cs	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLabProblemTemplate/DefaultProblem.cs	(revision 4214)
@@ -38,5 +38,5 @@
   [Creatable("Problems")]
   [StorableClass]
-  public sealed class $safeitemname$ : ParameterizedNamedItem, I$problemType$ObjectiveProblem {
+  public sealed class $safeitemname$ : ParameterizedNamedItem, $problemTypeImplementation$ {
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Type; }
@@ -44,32 +44,13 @@
 
     #region Parameter Properties
-    $maximizationParameterProperty$
-    IParameter I$problemType$ObjectiveProblem.MaximizationParameter {
-      get { return MaximizationParameter; }
-    }
-    $solutionCreatorParameterProperty$
-    IParameter IProblem.SolutionCreatorParameter {
-      get { return SolutionCreatorParameter; }
-    }
-    $evaluatorParameterProperty$
-    IParameter IProblem.EvaluatorParameter {
-      get { return EvaluatorParameter; }
-    }
+    $problemSpecificParameterProperties$
     $parameterProperties$
     #endregion
 
     #region Properties
+    $problemSpecificProperties$
     $properties$
     public IEnumerable<IOperator> Operators {
       get { return operators; }
-    }
-    ISolutionCreator IProblem.SolutionCreator {
-      get { return SolutionCreatorParameter.Value; }
-    }
-    I$problemType$ObjectiveEvaluator I$problemType$ObjectiveProblem.Evaluator {
-      get { return EvaluatorParameter.Value; }
-    }
-    IEvaluator IProblem.Evaluator {
-      get { return EvaluatorParameter.Value; }
     }
     #endregion
@@ -84,4 +65,5 @@
       // TODO: Create a new instance of evaluator and solution creator
 
+      $problemSpecificParameterInitializers$
       $parameterInitializers$
 
@@ -141,4 +123,10 @@
       // TODO: Add operators from the representation either by direct instantiation, or by using ApplicationManager.Manger.GetInstances<T>().Cast<IOperator>()
     }
+    private void ParameterizeSolutionCreator() {
+      // TODO: Set the parameters of the solution creator
+    }
+    private void ParameterizeEvaluator() {
+      // TODO: Set the parameters of the evaluator
+    }
     #endregion
   }
Index: /trunk/tools/Templates/HeuristicLabVS2010WizardsInstaller/HeuristicLabVS2010WizardsInstaller.vdproj
===================================================================
--- /trunk/tools/Templates/HeuristicLabVS2010WizardsInstaller/HeuristicLabVS2010WizardsInstaller.vdproj	(revision 4213)
+++ /trunk/tools/Templates/HeuristicLabVS2010WizardsInstaller/HeuristicLabVS2010WizardsInstaller.vdproj	(revision 4214)
@@ -317,5 +317,5 @@
         "ProductName" = "8:HeuristicLab 3.3 VS2010 Wizards"
         "ProductCode" = "8:{B99828C4-2D65-461D-B13C-CAB57EAB6AC1}"
-        "PackageCode" = "8:{A5414BAF-544C-469D-BAD3-302029AFF80E}"
+        "PackageCode" = "8:{F12DCE28-7303-41AE-9C8D-231C0F1DA713}"
         "UpgradeCode" = "8:{3AF928E8-1C64-4A5A-BC16-44CD128F21D3}"
         "AspNetVersion" = "8:4.0.30319.0"
@@ -781,5 +781,5 @@
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B51E170D986C45DD9BBEEC6B70686DC9"
             {
-            "SourcePath" = "8:..\\HeuristicLab.VS2010Wizards\\obj\\Release\\HeuristicLab.VS2010Wizards.dll"
+            "SourcePath" = "8:..\\HeuristicLab.VS2010Wizards\\obj\\x86\\Release\\HeuristicLab.VS2010Wizards.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
@@ -791,5 +791,5 @@
             "Hidden" = "11:FALSE"
             "System" = "11:FALSE"
-            "Permanent" = "11:TRUE"
+            "Permanent" = "11:FALSE"
             "SharedLegacy" = "11:FALSE"
             "PackageAs" = "3:1"
