Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj	(revision 11397)
@@ -38,4 +38,14 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.CodeEditor-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.CodeEditor-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Common-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
@@ -98,4 +108,10 @@
   <ItemGroup>
     <Compile Include="Plugin.cs" />
+    <Compile Include="ProblemDefinitionScriptView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProblemDefinitionScriptView.Designer.cs">
+      <DependentUpon>ProblemDefinitionScriptView.cs</DependentUpon>
+    </Compile>
     <Compile Include="ProgrammableProblemView.cs">
       <SubType>UserControl</SubType>
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/ProblemDefinitionScriptView.Designer.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/ProblemDefinitionScriptView.Designer.cs	(revision 11397)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/ProblemDefinitionScriptView.Designer.cs	(revision 11397)
@@ -0,0 +1,179 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Problems.Programmable.Views {
+  partial class ProblemDefinitionScriptView {
+    /// <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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProblemDefinitionScriptView));
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.variableStoreView = new HeuristicLab.Scripting.Views.VariableStoreView();
+      this.infoTabControl.SuspendLayout();
+      this.outputTabPage.SuspendLayout();
+      this.errorListTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // compileButton
+      // 
+      this.toolTip.SetToolTip(this.compileButton, "Compile (F6)");
+      // 
+      // imageList
+      // 
+      this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+      this.imageList.Images.SetKeyName(0, "");
+      this.imageList.Images.SetKeyName(1, "");
+      // 
+      // infoTabControl
+      // 
+      this.infoTabControl.Size = new System.Drawing.Size(593, 113);
+      // 
+      // outputTabPage
+      // 
+      this.outputTabPage.Size = new System.Drawing.Size(585, 87);
+      // 
+      // outputTextBox
+      // 
+      this.outputTextBox.Size = new System.Drawing.Size(579, 81);
+      // 
+      // errorListTabPage
+      // 
+      this.errorListTabPage.Size = new System.Drawing.Size(621, 86);
+      // 
+      // errorListView
+      // 
+      this.errorListView.Size = new System.Drawing.Size(615, 80);
+      // 
+      // codeEditor
+      // 
+      this.codeEditor.Size = new System.Drawing.Size(593, 429);
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Size = new System.Drawing.Size(593, 546);
+      this.splitContainer1.SplitterDistance = 429;
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.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.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.splitContainer2.Location = new System.Drawing.Point(6, 56);
+      this.splitContainer2.Name = "splitContainer2";
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.splitContainer1);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.variableStoreView);
+      this.splitContainer2.Size = new System.Drawing.Size(826, 546);
+      this.splitContainer2.SplitterDistance = 593;
+      this.splitContainer2.TabIndex = 10;
+      // 
+      // variableStoreView
+      // 
+      this.variableStoreView.Caption = "ItemCollection View";
+      this.variableStoreView.Content = null;
+      this.variableStoreView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableStoreView.Location = new System.Drawing.Point(0, 0);
+      this.variableStoreView.Name = "variableStoreView";
+      this.variableStoreView.ReadOnly = false;
+      this.variableStoreView.Size = new System.Drawing.Size(229, 546);
+      this.variableStoreView.TabIndex = 10;
+      // 
+      // ProblemDefinitionScriptView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer2);
+      this.Name = "ProblemDefinitionScriptView";
+      this.Controls.SetChildIndex(this.compilationLabel, 0);
+      this.Controls.SetChildIndex(this.compileButton, 0);
+      this.Controls.SetChildIndex(this.splitContainer2, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.infoTabControl.ResumeLayout(false);
+      this.outputTabPage.ResumeLayout(false);
+      this.outputTabPage.PerformLayout();
+      this.errorListTabPage.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private Scripting.Views.VariableStoreView variableStoreView;
+  }
+}
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/ProblemDefinitionScriptView.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/ProblemDefinitionScriptView.cs	(revision 11397)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable.Views/3.3/ProblemDefinitionScriptView.cs	(revision 11397)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.MainForm;
+using HeuristicLab.Scripting.Views;
+
+namespace HeuristicLab.Problems.Programmable.Views {
+  [View("ProblemDefinitionScriptView")]
+  [Content(typeof(ProblemDefinitionScript), IsDefaultView = true)]
+  public partial class ProblemDefinitionScriptView : ScriptView {
+
+    public new ProblemDefinitionScript Content {
+      get { return (ProblemDefinitionScript)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ProblemDefinitionScriptView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      variableStoreView.Content = Content == null ? null : Content.VariableStore;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      variableStoreView.Enabled = Content != null && !Locked && !ReadOnly;
+    }
+  }
+}
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Datastructures/Configuration.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Datastructures/Configuration.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Datastructures/Configuration.cs	(revision 11397)
@@ -54,5 +54,5 @@
 
 
-    public Configuration AddBinary(string name, int length) {
+    public Configuration AddBinaryVector(string name, int length) {
       if (Parameters.ContainsKey(name)) throw new ArgumentException("name must be unique", "name");
       Parameters.Add(name, new BinaryParameterConfiguration(length));
@@ -60,5 +60,5 @@
     }
 
-    public Configuration AddInteger(string name, int length, int min, int max, int? step = null) {
+    public Configuration AddIntegerVector(string name, int length, int min, int max, int? step = null) {
       if (Parameters.ContainsKey(name)) throw new ArgumentException("name must be unique", "name");
       Parameters.Add(name, new IntegerParameterConfiguration(length, min, max, step));
@@ -66,5 +66,5 @@
     }
 
-    public Configuration AddInteger(string name, int length, IList<int> min, IList<int> max, IList<int> step = null) {
+    public Configuration AddIntegerVector(string name, int length, IList<int> min, IList<int> max, IList<int> step = null) {
       if (Parameters.ContainsKey(name)) throw new ArgumentException("name must be unique", "name");
       Parameters.Add(name, new IntegerParameterConfiguration(length, min, max, step));
@@ -72,5 +72,5 @@
     }
 
-    public Configuration AddReal(string name, int length, double min, double max) {
+    public Configuration AddRealVector(string name, int length, double min, double max) {
       if (Parameters.ContainsKey(name)) throw new ArgumentException("name must be unique", "name");
       Parameters.Add(name, new RealParameterConfiguration(length, min, max));
@@ -78,5 +78,5 @@
     }
 
-    public Configuration AddReal(string name, int length, IList<double> min, IList<double> max) {
+    public Configuration AddRealVector(string name, int length, IList<double> min, IList<double> max) {
       if (Parameters.ContainsKey(name)) throw new ArgumentException("name must be unique", "name");
       Parameters.Add(name, new RealParameterConfiguration(length, min, max));
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Datastructures/ParameterVector.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Datastructures/ParameterVector.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Datastructures/ParameterVector.cs	(revision 11397)
@@ -76,9 +76,9 @@
     }
 
-    public BinaryVector Binary(string name) {
+    public BinaryVector BinaryVector(string name) {
       return BinaryParameters[name];
     }
 
-    public bool Binary(string name, int index) {
+    public bool BinaryValue(string name, int index) {
       return BinaryParameters[name][index];
     }
@@ -88,9 +88,9 @@
     }
 
-    public IntegerVector Integer(string name) {
+    public IntegerVector IntegerVector(string name) {
       return IntegerParameters[name];
     }
 
-    public int Integer(string name, int index) {
+    public int IntegerValue(string name, int index) {
       return IntegerParameters[name][index];
     }
@@ -100,9 +100,9 @@
     }
 
-    public RealVector Real(string name) {
+    public RealVector RealVector(string name) {
       return RealParameters[name];
     }
 
-    public double Real(string name, int index) {
+    public double RealValue(string name, int index) {
       return RealParameters[name][index];
     }
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj	(revision 11397)
@@ -153,4 +153,5 @@
     <Compile Include="Interfaces\IProblemDefinition.cs" />
     <Compile Include="Interfaces\ISingleObjectiveProblemDefinition.cs" />
+    <Compile Include="ProblemDefinition.cs" />
     <Compile Include="ProblemDefinitionScript.cs" />
     <Compile Include="SingleObjectiveProblemDefinition.cs" />
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IProblemDefinition.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IProblemDefinition.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IProblemDefinition.cs	(revision 11397)
@@ -23,4 +23,6 @@
 namespace HeuristicLab.Problems.Programmable {
   public interface IProblemDefinition {
+    dynamic vars { get; set; }
+    void Initialize();
     Configuration GetConfiguration();
   }
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveGenerator.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveGenerator.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveGenerator.cs	(revision 11397)
@@ -79,11 +79,11 @@
         moveScopes[i] = new Scope(i.ToString());
         foreach (var param in nbhood[i].BinaryNames)
-          moveScopes[i].Variables.Add(new Variable(param, nbhood[i].Binary(param)));
+          moveScopes[i].Variables.Add(new Variable(param, nbhood[i].BinaryVector(param)));
 
         foreach (var param in nbhood[i].IntegerNames)
-          moveScopes[i].Variables.Add(new Variable(param, nbhood[i].Integer(param)));
+          moveScopes[i].Variables.Add(new Variable(param, nbhood[i].IntegerVector(param)));
 
         foreach (var param in nbhood[i].RealNames)
-          moveScopes[i].Variables.Add(new Variable(param, nbhood[i].Real(param)));
+          moveScopes[i].Variables.Add(new Variable(param, nbhood[i].RealVector(param)));
 
         foreach (var param in nbhood[i].PermutationNames)
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/ProblemDefinition.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/ProblemDefinition.cs	(revision 11397)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/ProblemDefinition.cs	(revision 11397)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Problems.Programmable {
+  public abstract class ProblemDefinition : IProblemDefinition {
+    public dynamic vars { get; set; }
+
+    public abstract void Initialize();
+    public abstract Configuration GetConfiguration();
+  }
+}
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs	(revision 11397)
@@ -34,9 +34,19 @@
     protected bool SuppressEvents { get; set; }
 
+    [Storable]
+    private VariableStore variableStore;
+    public VariableStore VariableStore {
+      get { return variableStore; }
+    }
+
     [StorableConstructor]
     protected ProblemDefinitionScript(bool deserializing) : base(deserializing) { }
     protected ProblemDefinitionScript(ProblemDefinitionScript original, Cloner cloner)
-      : base(original, cloner) { }
-    public ProblemDefinitionScript() { }
+      : base(original, cloner) {
+      variableStore = cloner.Clone(original.variableStore);
+    }
+    protected ProblemDefinitionScript() {
+      variableStore = new VariableStore();
+    }
 
     private volatile IProblemDefinition instance;
@@ -74,4 +84,6 @@
       try {
         Instance = (IProblemDefinition)Activator.CreateInstance(types.First(x => typeof(IProblemDefinition).IsAssignableFrom(x)));
+        Instance.vars = new Variables(VariableStore);
+        Instance.Initialize();
       } catch {
         Instance = null;
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinition.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinition.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinition.cs	(revision 11397)
@@ -30,5 +30,4 @@
   [Item("Single-objective Problem Definition", "This definition can be dynamically created through code and assigned to the problem.")]
   public class SingleObjectiveProblemDefinition : ISingleObjectiveProblemDefinitionHost, ISingleObjectiveProblemDefinition {
-
     private bool isMaximizationProblem;
     public bool IsMaximizationProblem {
@@ -114,4 +113,14 @@
 
     #region Problem definition explicit interface implementations
+    dynamic IProblemDefinition.vars { get; set; }
+
+    void IProblemDefinition.Initialize() {
+
+    }
+
+    Configuration IProblemDefinition.GetConfiguration() {
+      return Configuration();
+    }
+
     bool ISingleObjectiveProblemDefinition.IsMaximizationProblem {
       get { return IsMaximizationProblem; }
@@ -128,8 +137,4 @@
     IEnumerable<ParameterVector> ISingleObjectiveProblemDefinition.GetNeighbors(IRandom random, ParameterVector vector) {
       return Neighbors(random, vector);
-    }
-
-    Configuration IProblemDefinition.GetConfiguration() {
-      return Configuration();
     }
     #endregion
Index: /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinitionScript.cs
===================================================================
--- /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinitionScript.cs	(revision 11396)
+++ /branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProblemDefinitionScript.cs	(revision 11397)
@@ -60,16 +60,16 @@
 using HeuristicLab.Problems.Programmable;
 
-public class ProblemDefinition : ISingleObjectiveProblemDefinition {
-  public ProblemDefinition() {
-    // initialize private fields
+public class CustomProblemDefinition : ProblemDefinition, ISingleObjectiveProblemDefinition {
+  public bool IsMaximizationProblem { get { return false; } }
+
+  public override void Initialize() {
+    // when the definition is created here you can initialize variables in the variable store
   }
 
-  public bool IsMaximizationProblem { get { return false; } }
-
-  public Configuration GetConfiguration() {
+  public override Configuration GetConfiguration() {
     return new Configuration()
-      // .AddBinary(""b"", length: 5)
-      // .AddInteger(""i"", length: 5, min: 2, max: 14, step: 4)
-      // .AddReal(""r"", length: 5, min: -1.0, max: 1.0)
+      // .AddBinaryVector(""b"", length: 5)
+      // .AddIntegerVector(""i"", length: 5, min: 2, max: 14, step: 4)
+      // .AddRealVector(""r"", length: 5, min: -1.0, max: 1.0)
       // .AddPermutation(""P"", length: 5, type: PermutationTypes.Absolute)
     ;
@@ -78,5 +78,6 @@
   public double Evaluate(IRandom random, ParameterVector vector) {
     var quality = 0.0;
-    // quality = vector.Real(""r"").Sum(x => x * x);
+    // use vars.yourVariable to access variables in the variable store i.e. yourVariable
+    // quality = vector.RealVector(""r"").Sum(x => x * x);
     return quality;
   }
@@ -84,4 +85,5 @@
   public void Analyze(ParameterVector[] vectors, double[] qualities, ResultCollection results) {
     // write or update results given the range of vectors and resulting qualities
+    // use e.g. vars.yourVariable to access variables in the variable store i.e. yourVariable
   }
 
@@ -90,10 +92,11 @@
     // This method is only called from move-based algorithms (LocalSearch, SimulatedAnnealing, etc.)
     while (true) {
+      // this is not an infinite loop as only a finite amount of samples will be drawn
+      // it is possible to return a concrete amount of neighbors also
       var neighbor = (ParameterVector)vector.Clone();
       //e.g. make a bit flip in a binary parameter
-      //var bIndex = random.Next(neighbor.Binary(""b"").Length);
-      //neighbor.Binary(""b"")[bIndex] = !neighbor.Binary(""b"")[bIndex];
+      //var bIndex = random.Next(neighbor.BinaryVector(""b"").Length);
+      //neighbor.BinaryVector(""b"")[bIndex] = !neighbor.BinaryVector(""b"")[bIndex];
       yield return neighbor;
-      yield break;
     }
   }
