Index: trunk/sources/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj	(revision 2877)
+++ trunk/sources/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj	(revision 2897)
@@ -72,4 +72,16 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.2, Version=3.2.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.Common\3.2\bin\Debug\HeuristicLab.Common-3.2.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.2, Version=3.2.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.Common.Resources\3.2\bin\Debug\HeuristicLab.Common.Resources-3.2.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\HeuristicLab.Parameters\3.3\bin\Debug\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -129,7 +141,15 @@
       <Name>HeuristicLab.MainForm-3.2</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators.Views\3.3\HeuristicLab.Operators.Views-3.3.csproj">
+      <Project>{C49CB749-8B24-4628-8003-E86475749410}</Project>
+      <Name>HeuristicLab.Operators.Views-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
       <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
       <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters.Views\3.3\HeuristicLab.Parameters.Views-3.3.csproj">
+      <Project>{AE5B1CE5-9862-4D6F-A700-D72CD9AEA295}</Project>
+      <Name>HeuristicLab.Parameters.Views-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
Index: trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs	(revision 2877)
+++ trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperator.cs	(revision 2897)
@@ -43,5 +43,5 @@
   [Creatable("Test")]
   [EmptyStorableClass]
-  public class ProgrammableOperator : SingleSuccessorOperator {
+  public class ProgrammableOperator : Operator {
 
     #region Fields & Properties
@@ -50,5 +50,5 @@
     public CompilerErrorCollection CompileErrors { get; private set; }
     public string CompilationUnitCode { get; private set; }
-    
+
     [Storable]
     private string code;
@@ -75,13 +75,13 @@
 
     [Storable]
-    private IEnumerable<string> _persistedAssemblyNames {      
-      get {        
+    private IEnumerable<string> _persistedAssemblyNames {
+      get {
         return Assemblies.Keys.Select(a => a.FullName);
       }
       set {
-        var selectedAssemblyNames = new HashSet<string>(value);        
+        var selectedAssemblyNames = new HashSet<string>(value);
         foreach (var a in Assemblies.Keys.ToList()) {
           Assemblies[a] = selectedAssemblyNames.Contains(a.FullName);
-        }      
+        }
       }
     }
@@ -131,6 +131,6 @@
     public void SetDescription(string description) {
       if (description == null)
-        throw new NullReferenceException("description must not be null");            
-      Description = description;              
+        throw new NullReferenceException("description must not be null");
+      Description = description;
     }
 
@@ -161,6 +161,6 @@
     #region Construction & Initialization
 
-    public ProgrammableOperator() {      
-      code = "";      
+    public ProgrammableOperator() {
+      code = "";
       executeMethod = null;
       ProgrammableOperator.StaticInitialize();
@@ -168,4 +168,10 @@
       Plugins = defaultPluginDict;
       namespaces = new HashSet<string>(DiscoverNamespaces());
+      Parameters.Changed += (s, a) => OnSignatureChanged(s, a);
+    }
+
+    protected void OnSignatureChanged(object sender, EventArgs args) {
+      if (SignatureChanged != null)
+        SignatureChanged(sender, args);
     }
 
@@ -199,11 +205,11 @@
     }
 
-    protected static List<Assembly> defaultAssemblies = new List<Assembly>() {      
+    protected static List<Assembly> defaultAssemblies = new List<Assembly>() {
       typeof(System.Linq.Enumerable).Assembly,  // add reference to version 3.5 of System.dll
       typeof(System.Collections.Generic.List<>).Assembly,
-      typeof(System.Text.StringBuilder).Assembly,      
+      typeof(System.Text.StringBuilder).Assembly,
       typeof(System.Data.Linq.DataContext).Assembly,
-      typeof(HeuristicLab.Core.Item).Assembly,      
-      typeof(HeuristicLab.Data.IntData).Assembly,            
+      typeof(HeuristicLab.Core.Item).Assembly,
+      typeof(HeuristicLab.Data.IntData).Assembly,
     };
 
@@ -215,6 +221,5 @@
             assemblies.Add(a, false);
           }
-        }
-        catch (NotSupportedException) {
+        } catch (NotSupportedException) {
           // NotSupportedException is thrown while accessing 
           // the Location property of the anonymously hosted
@@ -342,11 +347,13 @@
       get {
         var sb = new StringBuilder()
-        .Append("public static IOperation Execute(IOperator op, IScope scope");        
+        .Append("public static IOperation Execute(IOperator op, IExecutionContext context");
         foreach (IParameter param in Parameters) {
           sb.Append(String.Format(", {0} {1}", param.DataType.Name, param.Name));
-        }        
+        }
         return sb.Append(")").ToString();
       }
     }
+
+    public event EventHandler SignatureChanged;
 
     private static Regex lineSplitter = new Regex(@"\r\n|\r|\n");
@@ -355,7 +362,8 @@
       CodeMemberMethod method = new CodeMemberMethod();
       method.Name = "Execute";
-      method.ReturnType = new CodeTypeReference(typeof(HeuristicLab.Core.IOperation));
+      method.ReturnType = new CodeTypeReference(typeof(IOperation));
       method.Attributes = MemberAttributes.Public | MemberAttributes.Static;
-      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IOperator), "op"));      
+      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IOperator), "op"));
+      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IExecutionContext), "context"));
       foreach (var param in Parameters)
         method.Parameters.Add(new CodeParameterDeclarationExpression(param.DataType, param.Name));
@@ -381,9 +389,9 @@
       }
 
-      var parameters = new List<object>() { this };      
+      var parameters = new List<object>() { this, ExecutionContext };
       parameters.AddRange(Parameters.Select(p => (object)p.ActualValue));
       return (IOperation)executeMethod.Invoke(null, parameters.ToArray());
     }
-    
+
     public event EventHandler CodeChanged;
     protected virtual void OnCodeChanged() {
@@ -394,5 +402,5 @@
     #endregion
 
-    #region Cloning        
+    #region Cloning
 
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -407,7 +415,7 @@
       return clone;
     }
-    
-    #endregion
-    
+
+    #endregion
+
   }
 }
Index: trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.Designer.cs	(revision 2877)
+++ trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.Designer.cs	(revision 2897)
@@ -45,92 +45,90 @@
     /// </summary>
     private void InitializeComponent() {
-      System.Windows.Forms.SplitContainer splitContainer1;
-      System.Windows.Forms.SplitContainer splitContainer2;
-      System.Windows.Forms.GroupBox groupBox1;
-      System.Windows.Forms.GroupBox groupBox2;
+      System.Windows.Forms.TabPage tabPage2;
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
       this.assembliesTreeView = new System.Windows.Forms.TreeView();
-      this.groupBox3 = new System.Windows.Forms.GroupBox();
+      this.namespacesTreeView = new System.Windows.Forms.TreeView();
       this.showCodeButton = new System.Windows.Forms.Button();
+      this.compileButton = new System.Windows.Forms.Button();
       this.codeEditor = new HeuristicLab.CodeEditor.CodeEditor();
-      this.compileButton = new System.Windows.Forms.Button();
-      this.tabControl = new System.Windows.Forms.TabControl();
-      this.codeTabPage = new System.Windows.Forms.TabPage();
-      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
-      this.removeVariableInfoButton = new System.Windows.Forms.Button();
-      this.addVariableInfoButton = new System.Windows.Forms.Button();
-      //this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
-      this.variablesTabPage = new System.Windows.Forms.TabPage();
-      //this.operatorBaseVariablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
-      this.constraintsTabPage = new System.Windows.Forms.TabPage();
-      //this.constrainedItemBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
-      this.descriptionTabPage = new System.Windows.Forms.TabPage();
-      //this.descriptionTextBox = new System.Windows.Forms.TextBox();
-      this.namespacesTreeView = new System.Windows.Forms.TreeView();
-      splitContainer1 = new System.Windows.Forms.SplitContainer();
-      splitContainer2 = new System.Windows.Forms.SplitContainer();
-      groupBox1 = new System.Windows.Forms.GroupBox();
-      groupBox2 = new System.Windows.Forms.GroupBox();
-      splitContainer1.Panel1.SuspendLayout();
-      splitContainer1.Panel2.SuspendLayout();
-      splitContainer1.SuspendLayout();
-      splitContainer2.Panel1.SuspendLayout();
-      splitContainer2.Panel2.SuspendLayout();
-      splitContainer2.SuspendLayout();
-      groupBox1.SuspendLayout();
-      groupBox2.SuspendLayout();
-      this.groupBox3.SuspendLayout();
-      this.tabControl.SuspendLayout();
-      this.codeTabPage.SuspendLayout();
-      this.variableInfosTabPage.SuspendLayout();
-      this.variablesTabPage.SuspendLayout();
-      this.constraintsTabPage.SuspendLayout();
-      this.descriptionTabPage.SuspendLayout();
+      this.tabControl1 = new System.Windows.Forms.TabControl();
+      this.tabPage1 = new System.Windows.Forms.TabPage();
+      this.parameterCollectionView1 = new HeuristicLab.Core.Views.ParameterCollectionView();
+      tabPage2 = new System.Windows.Forms.TabPage();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      tabPage2.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.tabControl1.SuspendLayout();
+      this.tabPage1.SuspendLayout();
       this.SuspendLayout();
       // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(913, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Size = new System.Drawing.Size(913, 48);
+      this.descriptionTextBox.TextChanged += new System.EventHandler(this.descriptionTextBox_TextChanged);
+      // 
+      // tabPage2
+      // 
+      tabPage2.Controls.Add(this.splitContainer1);
+      tabPage2.Location = new System.Drawing.Point(4, 22);
+      tabPage2.Name = "tabPage2";
+      tabPage2.Padding = new System.Windows.Forms.Padding(3);
+      tabPage2.Size = new System.Drawing.Size(977, 593);
+      tabPage2.TabIndex = 1;
+      tabPage2.Text = "Code";
+      tabPage2.UseVisualStyleBackColor = true;
+      // 
       // splitContainer1
       // 
-      splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
-      splitContainer1.Location = new System.Drawing.Point(3, 3);
-      splitContainer1.Name = "splitContainer1";
-      splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer1.Name = "splitContainer1";
       // 
       // splitContainer1.Panel1
       // 
-      splitContainer1.Panel1.Controls.Add(splitContainer2);
+      this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
+      this.splitContainer1.Panel1.Controls.Add(this.showCodeButton);
+      this.splitContainer1.Panel1.Controls.Add(this.compileButton);
       // 
       // splitContainer1.Panel2
       // 
-      splitContainer1.Panel2.Controls.Add(this.groupBox3);
-      splitContainer1.Size = new System.Drawing.Size(693, 457);
-      splitContainer1.SplitterDistance = 85;
-      splitContainer1.TabIndex = 6;
+      this.splitContainer1.Panel2.Controls.Add(this.codeEditor);
+      this.splitContainer1.Size = new System.Drawing.Size(971, 587);
+      this.splitContainer1.SplitterDistance = 254;
+      this.splitContainer1.TabIndex = 0;
       // 
       // splitContainer2
       // 
-      splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
-      splitContainer2.Location = new System.Drawing.Point(0, 0);
-      splitContainer2.Name = "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.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
       // 
       // splitContainer2.Panel1
       // 
-      splitContainer2.Panel1.Controls.Add(groupBox1);
+      this.splitContainer2.Panel1.Controls.Add(this.assembliesTreeView);
       // 
       // splitContainer2.Panel2
       // 
-      splitContainer2.Panel2.Controls.Add(groupBox2);
-      splitContainer2.Size = new System.Drawing.Size(693, 85);
-      splitContainer2.SplitterDistance = 340;
-      splitContainer2.TabIndex = 2;
-      // 
-      // groupBox1
-      // 
-      groupBox1.Controls.Add(this.assembliesTreeView);
-      groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-      groupBox1.Location = new System.Drawing.Point(0, 0);
-      groupBox1.Name = "groupBox1";
-      groupBox1.Size = new System.Drawing.Size(340, 85);
-      groupBox1.TabIndex = 0;
-      groupBox1.TabStop = false;
-      groupBox1.Text = "Assemblies";
+      this.splitContainer2.Panel2.Controls.Add(this.namespacesTreeView);
+      this.splitContainer2.Size = new System.Drawing.Size(248, 552);
+      this.splitContainer2.SplitterDistance = 276;
+      this.splitContainer2.TabIndex = 2;
       // 
       // assembliesTreeView
@@ -138,20 +136,9 @@
       this.assembliesTreeView.CheckBoxes = true;
       this.assembliesTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.assembliesTreeView.Location = new System.Drawing.Point(3, 16);
+      this.assembliesTreeView.Location = new System.Drawing.Point(0, 0);
       this.assembliesTreeView.Name = "assembliesTreeView";
-      this.assembliesTreeView.Size = new System.Drawing.Size(334, 66);
-      this.assembliesTreeView.TabIndex = 1;
+      this.assembliesTreeView.Size = new System.Drawing.Size(248, 276);
+      this.assembliesTreeView.TabIndex = 0;
       this.assembliesTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.assembliesTreeView_AfterCheck);
-      // 
-      // groupBox2
-      // 
-      groupBox2.Controls.Add(this.namespacesTreeView);
-      groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
-      groupBox2.Location = new System.Drawing.Point(0, 0);
-      groupBox2.Name = "groupBox2";
-      groupBox2.Size = new System.Drawing.Size(349, 85);
-      groupBox2.TabIndex = 0;
-      groupBox2.TabStop = false;
-      groupBox2.Text = "Namespaces";
       // 
       // namespacesTreeView
@@ -159,206 +146,82 @@
       this.namespacesTreeView.CheckBoxes = true;
       this.namespacesTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.namespacesTreeView.Location = new System.Drawing.Point(3, 16);
+      this.namespacesTreeView.Location = new System.Drawing.Point(0, 0);
       this.namespacesTreeView.Name = "namespacesTreeView";
       this.namespacesTreeView.PathSeparator = ".";
-      this.namespacesTreeView.Size = new System.Drawing.Size(343, 66);
-      this.namespacesTreeView.TabIndex = 2;
+      this.namespacesTreeView.Size = new System.Drawing.Size(248, 272);
+      this.namespacesTreeView.TabIndex = 0;
       this.namespacesTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.namespacesTreeView_AfterCheck);
       // 
-      // groupBox3
-      // 
-      this.groupBox3.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.groupBox3.Controls.Add(this.showCodeButton);
-      this.groupBox3.Controls.Add(this.codeEditor);
-      this.groupBox3.Controls.Add(this.compileButton);
-      this.groupBox3.Location = new System.Drawing.Point(3, 2);
-      this.groupBox3.Name = "groupBox3";
-      this.groupBox3.Size = new System.Drawing.Size(687, 363);
-      this.groupBox3.TabIndex = 7;
-      this.groupBox3.TabStop = false;
-      this.groupBox3.Text = "Code";
-      // 
       // showCodeButton
       // 
-      this.showCodeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.showCodeButton.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
-      this.showCodeButton.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.ControlDark;
-      this.showCodeButton.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.GradientActiveCaption;
+      this.showCodeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.showCodeButton.BackColor = System.Drawing.SystemColors.GradientInactiveCaption;
+      this.showCodeButton.Cursor = System.Windows.Forms.Cursors.Hand;
       this.showCodeButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-      this.showCodeButton.Location = new System.Drawing.Point(467, 333);
+      this.showCodeButton.Location = new System.Drawing.Point(65, 561);
       this.showCodeButton.Name = "showCodeButton";
-      this.showCodeButton.Size = new System.Drawing.Size(133, 23);
-      this.showCodeButton.TabIndex = 4;
-      this.showCodeButton.Text = "Show Generated Code";
-      this.showCodeButton.UseVisualStyleBackColor = true;
+      this.showCodeButton.Size = new System.Drawing.Size(186, 23);
+      this.showCodeButton.TabIndex = 0;
+      this.showCodeButton.Text = "&Show Generated Code";
+      this.showCodeButton.UseVisualStyleBackColor = false;
       this.showCodeButton.Click += new System.EventHandler(this.showCodeButton_Click);
       // 
       // compileButton
       // 
-      this.compileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.compileButton.Location = new System.Drawing.Point(606, 334);
+      this.compileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.compileButton.Location = new System.Drawing.Point(3, 561);
       this.compileButton.Name = "compileButton";
-      this.compileButton.Size = new System.Drawing.Size(75, 23);
-      this.compileButton.TabIndex = 3;
+      this.compileButton.Size = new System.Drawing.Size(56, 23);
+      this.compileButton.TabIndex = 1;
       this.compileButton.Text = "&Compile";
       this.compileButton.UseVisualStyleBackColor = true;
       this.compileButton.Click += new System.EventHandler(this.compileButton_Click);
       // 
-      // tabControl
-      // 
-      this.tabControl.Controls.Add(this.codeTabPage);
-      this.tabControl.Controls.Add(this.variableInfosTabPage);
-      this.tabControl.Controls.Add(this.variablesTabPage);
-      this.tabControl.Controls.Add(this.constraintsTabPage);
-      this.tabControl.Controls.Add(this.descriptionTabPage);
-      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tabControl.Location = new System.Drawing.Point(0, 0);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(707, 489);
-      this.tabControl.TabIndex = 0;
-      // 
-      // codeTabPage
-      // 
-      this.codeTabPage.Controls.Add(splitContainer1);
-      this.codeTabPage.Location = new System.Drawing.Point(4, 22);
-      this.codeTabPage.Name = "codeTabPage";
-      this.codeTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.codeTabPage.Size = new System.Drawing.Size(699, 463);
-      this.codeTabPage.TabIndex = 5;
-      this.codeTabPage.Text = "Code";
-      this.codeTabPage.UseVisualStyleBackColor = true;
-      // 
-      // variableInfosTabPage
-      // 
-      this.variableInfosTabPage.Controls.Add(this.removeVariableInfoButton);
-      this.variableInfosTabPage.Controls.Add(this.addVariableInfoButton);
-      //this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
-      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
-      this.variableInfosTabPage.Name = "variableInfosTabPage";
-      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.variableInfosTabPage.Size = new System.Drawing.Size(699, 463);
-      this.variableInfosTabPage.TabIndex = 1;
-      this.variableInfosTabPage.Text = "Variable Infos";
-      this.variableInfosTabPage.UseVisualStyleBackColor = true;
-      // 
-      // removeVariableInfoButton
-      // 
-      this.removeVariableInfoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeVariableInfoButton.Enabled = false;
-      this.removeVariableInfoButton.Location = new System.Drawing.Point(87, 434);
-      this.removeVariableInfoButton.Name = "removeVariableInfoButton";
-      this.removeVariableInfoButton.Size = new System.Drawing.Size(75, 23);
-      this.removeVariableInfoButton.TabIndex = 2;
-      this.removeVariableInfoButton.Text = "&Remove";
-      this.removeVariableInfoButton.UseVisualStyleBackColor = true;
-      //this.removeVariableInfoButton.Click += new System.EventHandler(this.removeVariableInfoButton_Click);
-      // 
-      // addVariableInfoButton
-      // 
-      this.addVariableInfoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addVariableInfoButton.Location = new System.Drawing.Point(6, 434);
-      this.addVariableInfoButton.Name = "addVariableInfoButton";
-      this.addVariableInfoButton.Size = new System.Drawing.Size(75, 23);
-      this.addVariableInfoButton.TabIndex = 1;
-      this.addVariableInfoButton.Text = "&Add...";
-      this.addVariableInfoButton.UseVisualStyleBackColor = true;
-      ///this.addVariableInfoButton.Click += new System.EventHandler(this.addVariableInfoButton_Click);
-      // 
-      // operatorBaseVariableInfosView
-      // 
-      /*this.operatorBaseVariableInfosView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+      // codeEditor
+      // 
+      this.codeEditor.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.codeEditor.Location = new System.Drawing.Point(0, 0);
+      this.codeEditor.Name = "codeEditor";
+      this.codeEditor.Prefix = "";
+      this.codeEditor.Size = new System.Drawing.Size(713, 587);
+      this.codeEditor.Suffix = "";
+      this.codeEditor.TabIndex = 0;
+      this.codeEditor.UserCode = "";
+      this.codeEditor.Validated += new System.EventHandler(this.codeEditor_Validated);
+      // 
+      // tabControl1
+      // 
+      this.tabControl1.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.operatorBaseVariableInfosView.Caption = "Operator";
-      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
-      this.operatorBaseVariableInfosView.Operator = null;
-      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(690, 425);
-      this.operatorBaseVariableInfosView.TabIndex = 0;
-      this.operatorBaseVariableInfosView.SelectedVariableInfosChanged += new System.EventHandler(this.operatorBaseVariableInfosView_SelectedVariableInfosChanged);
-       */
-      // 
-      // variablesTabPage
-      // 
-      //this.variablesTabPage.Controls.Add(this.operatorBaseVariablesView);
-      this.variablesTabPage.Location = new System.Drawing.Point(4, 22);
-      this.variablesTabPage.Name = "variablesTabPage";
-      this.variablesTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.variablesTabPage.Size = new System.Drawing.Size(699, 463);
-      this.variablesTabPage.TabIndex = 2;
-      this.variablesTabPage.Text = "Local Variables";
-      this.variablesTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorBaseVariablesView
-      // 
-      /*this.operatorBaseVariablesView.Caption = "Operator";
-      this.operatorBaseVariablesView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorBaseVariablesView.Location = new System.Drawing.Point(3, 3);
-      this.operatorBaseVariablesView.Name = "operatorBaseVariablesView";
-      this.operatorBaseVariablesView.Operator = null;
-      this.operatorBaseVariablesView.Size = new System.Drawing.Size(693, 457);
-      this.operatorBaseVariablesView.TabIndex = 0; */
-      // 
-      // constraintsTabPage
-      // 
-      //this.constraintsTabPage.Controls.Add(this.constrainedItemBaseView);
-      this.constraintsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.constraintsTabPage.Name = "constraintsTabPage";
-      this.constraintsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.constraintsTabPage.Size = new System.Drawing.Size(699, 463);
-      this.constraintsTabPage.TabIndex = 3;
-      this.constraintsTabPage.Text = "Constraints";
-      this.constraintsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // constrainedItemBaseView
-      // 
-      /*this.constrainedItemBaseView.Caption = "Constrained Item";
-      this.constrainedItemBaseView.ConstrainedItem = null;
-      this.constrainedItemBaseView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.constrainedItemBaseView.Location = new System.Drawing.Point(3, 3);
-      this.constrainedItemBaseView.Name = "constrainedItemBaseView";
-      this.constrainedItemBaseView.Size = new System.Drawing.Size(693, 457);
-      this.constrainedItemBaseView.TabIndex = 0; */
-      // 
-      // descriptionTabPage
-      // 
-      this.descriptionTabPage.Controls.Add(this.descriptionTextBox);
-      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
-      this.descriptionTabPage.Name = "descriptionTabPage";
-      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.descriptionTabPage.Size = new System.Drawing.Size(699, 463);
-      this.descriptionTabPage.TabIndex = 4;
-      this.descriptionTabPage.Text = "Description";
-      this.descriptionTabPage.UseVisualStyleBackColor = true;
-      // 
-      // descriptionTextBox
-      // 
-      /*this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.descriptionTextBox.Location = new System.Drawing.Point(3, 3);
-      this.descriptionTextBox.Multiline = true;
-      this.descriptionTextBox.Name = "descriptionTextBox";
-      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.descriptionTextBox.Size = new System.Drawing.Size(693, 457);
-      this.descriptionTextBox.TabIndex = 0;
-      this.descriptionTextBox.Validated += new System.EventHandler(this.descriptionTextBox_Validated); */
-      // 
-      // codeEditor
-      // 
-      this.codeEditor.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.codeEditor.Location = new System.Drawing.Point(6, 19);
-      this.codeEditor.Name = "codeEditor";
-      this.codeEditor.Prefix = "using System;\r\nusing HeuristicLab.Common.Resources;\r\n\r\npublic class Operator {\r\n " +
-          " public static void Apply(int arg) {";
-      this.codeEditor.Size = new System.Drawing.Size(675, 309);
-      this.codeEditor.Suffix = "\n    return null;\n  }\n}";
-      this.codeEditor.TabIndex = 0;
-      this.codeEditor.UserCode = "\n\n\n";
-      this.codeEditor.TextEditorValidated += new System.EventHandler(this.codeEditor_Validated);
+      this.tabControl1.Controls.Add(this.tabPage1);
+      this.tabControl1.Controls.Add(tabPage2);
+      this.tabControl1.Location = new System.Drawing.Point(0, 78);
+      this.tabControl1.Name = "tabControl1";
+      this.tabControl1.SelectedIndex = 0;
+      this.tabControl1.Size = new System.Drawing.Size(985, 619);
+      this.tabControl1.TabIndex = 7;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.parameterCollectionView1);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(898, 439);
+      this.tabPage1.TabIndex = 0;
+      this.tabPage1.Text = "Parameters";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // parameterCollectionView1
+      // 
+      this.parameterCollectionView1.Caption = "ParameterCollection";
+      this.parameterCollectionView1.Content = null;
+      this.parameterCollectionView1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.parameterCollectionView1.Location = new System.Drawing.Point(3, 3);
+      this.parameterCollectionView1.Name = "parameterCollectionView1";
+      this.parameterCollectionView1.Size = new System.Drawing.Size(892, 433);
+      this.parameterCollectionView1.TabIndex = 0;
       // 
       // ProgrammableOperatorView
@@ -366,24 +229,24 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.tabControl1);
       this.Name = "ProgrammableOperatorView";
-      this.Size = new System.Drawing.Size(707, 489);
-      splitContainer1.Panel1.ResumeLayout(false);
-      splitContainer1.Panel2.ResumeLayout(false);
-      splitContainer1.ResumeLayout(false);
-      splitContainer2.Panel1.ResumeLayout(false);
-      splitContainer2.Panel2.ResumeLayout(false);
-      splitContainer2.ResumeLayout(false);
-      groupBox1.ResumeLayout(false);
-      groupBox2.ResumeLayout(false);
-      this.groupBox3.ResumeLayout(false);
-      this.tabControl.ResumeLayout(false);
-      this.codeTabPage.ResumeLayout(false);
-      this.variableInfosTabPage.ResumeLayout(false);
-      this.variablesTabPage.ResumeLayout(false);
-      this.constraintsTabPage.ResumeLayout(false);
-      this.descriptionTabPage.ResumeLayout(false);
-      this.descriptionTabPage.PerformLayout();
+      this.Size = new System.Drawing.Size(985, 697);
+      this.Controls.SetChildIndex(this.tabControl1, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      tabPage2.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.ResumeLayout(false);
+      this.tabControl1.ResumeLayout(false);
+      this.tabPage1.ResumeLayout(false);
       this.ResumeLayout(false);
+      this.PerformLayout();
 
     }
@@ -391,24 +254,14 @@
     #endregion
 
-    private System.Windows.Forms.TabControl tabControl;
-    private System.Windows.Forms.TabPage codeTabPage;
-    private System.Windows.Forms.TabPage variableInfosTabPage;
-    //private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
-    private System.Windows.Forms.TabPage variablesTabPage;
-    //private HeuristicLab.Core.OperatorBaseVariablesView operatorBaseVariablesView;
-    private System.Windows.Forms.TabPage constraintsTabPage;
-    //private HeuristicLab.Core.ConstrainedItemBaseView constrainedItemBaseView;
-    private System.Windows.Forms.TabPage descriptionTabPage;
-    private System.Windows.Forms.TextBox descriptionTextBox;
-    private System.Windows.Forms.Button removeVariableInfoButton;
-    private System.Windows.Forms.Button addVariableInfoButton;
-    private System.Windows.Forms.TreeView assembliesTreeView;
-    private System.Windows.Forms.TreeView namespacesTreeView;
-    private System.Windows.Forms.GroupBox groupBox3;
+    private System.Windows.Forms.TabControl tabControl1;
+    private System.Windows.Forms.TabPage tabPage1;
+    private HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView1;
+    private System.Windows.Forms.SplitContainer splitContainer1;
     private HeuristicLab.CodeEditor.CodeEditor codeEditor;
     private System.Windows.Forms.Button compileButton;
     private System.Windows.Forms.Button showCodeButton;
-
-
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private System.Windows.Forms.TreeView assembliesTreeView;
+    private System.Windows.Forms.TreeView namespacesTreeView;    
   }
 }
Index: trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs	(revision 2877)
+++ trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.cs	(revision 2897)
@@ -34,12 +34,15 @@
 using HeuristicLab.CodeEditor;
 using HeuristicLab.Core.Views;
+using HeuristicLab.Operators.Views;
+using HeuristicLab.MainForm;
 
 namespace HeuristicLab.Operators.Programmable {
 
+  [Content(typeof(ProgrammableOperator), true)]
   public partial class ProgrammableOperatorView : NamedItemView {
 
     public ProgrammableOperator ProgrammableOperator {
       get { return (ProgrammableOperator)base.Content; }
-      set { base.Content = (NamedItem)value; }
+      set { base.Content = (ProgrammableOperator)value; }
     }
 
@@ -53,47 +56,28 @@
     }
 
-    protected override void DeregisterContentEvents() {      
-      //operatorBaseVariableInfosView.Operator = null;
-      //operatorBaseVariablesView.Operator = null;
-      //constrainedItemBaseView.ConstrainedItem = null;
-      ProgrammableOperator.CodeChanged -= new EventHandler(ProgrammableOperator_CodeChanged);
-      ProgrammableOperator.DescriptionChanged -= new EventHandler(ProgrammableOperator_DescriptionChanged);
-      base.DeregisterContentEvents();            
-    }
-
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      //operatorBaseVariableInfosView.Operator = ProgrammableOperator;
-      //operatorBaseVariablesView.Operator = ProgrammableOperator;
-      //constrainedItemBaseView.ConstrainedItem = ProgrammableOperator;
-      ProgrammableOperator.CodeChanged += new EventHandler(ProgrammableOperator_CodeChanged);
-      ProgrammableOperator.DescriptionChanged += new EventHandler(ProgrammableOperator_DescriptionChanged);
-    }
-
+      ProgrammableOperator.CodeChanged += ProgrammableOperator_CodeChanged;
+      ProgrammableOperator.DescriptionChanged += ProgrammableOperator_DescriptionChanged;
+      ProgrammableOperator.SignatureChanged += ProgrammableOperator_SignatureChanged;
+    }
+
+    protected override void DeregisterContentEvents() {
+      ProgrammableOperator.CodeChanged -= ProgrammableOperator_CodeChanged;
+      ProgrammableOperator.DescriptionChanged -= ProgrammableOperator_DescriptionChanged;
+      ProgrammableOperator.SignatureChanged -= ProgrammableOperator_SignatureChanged;
+      base.DeregisterContentEvents();
+    }
 
     protected override void OnContentChanged() {
-      base.OnContentChanged();    
+      base.OnContentChanged();
       if (ProgrammableOperator == null) {
         codeEditor.Text = "";
         codeEditor.Enabled = false;
-        addVariableInfoButton.Enabled = false;
-        removeVariableInfoButton.Enabled = false;
         descriptionTextBox.Text = "";
         descriptionTextBox.Enabled = false;
-        codeEditor.Prefix = @"using System
-
-public class Operator {
-  public static IOperation Execute(IOperator op, IScope scope, parameters ...) {
-";
-        codeEditor.Suffix = @"
-    return null;
-  }
-}";
         assembliesTreeView.Nodes.Clear();
       } else {
         codeEditor.Enabled = true;
-        addVariableInfoButton.Enabled = true;
-        //removeVariableInfoButton.Enabled = operatorBaseVariableInfosView.SelectedVariableInfos.Count > 0;
         descriptionTextBox.Text = ProgrammableOperator.Description;
         descriptionTextBox.Enabled = true;
@@ -112,4 +96,5 @@
         }
         codeEditor.ScrollAfterPrefix();
+        codeEditor.ShowCompileErrors(ProgrammableOperator.CompileErrors, "ProgrammableOperator");
       }
     }
@@ -130,34 +115,4 @@
       ProgrammableOperator.Code = codeEditor.UserCode;
     }
-    
-    /*
-    private void operatorBaseVariableInfosView_SelectedVariableInfosChanged(object sender, EventArgs e) {
-      removeVariableInfoButton.Enabled = operatorBaseVariableInfosView.SelectedVariableInfos.Count > 0;
-    }
-    
-    private void descriptionTextBox_Validated(object sender, EventArgs e) {
-      ProgrammableOperator.SetDescription(descriptionTextBox.Text);
-    }
-
-    private void addVariableInfoButton_Click(object sender, EventArgs e) {
-      AddVariableInfoDialog dialog = new AddVariableInfoDialog();
-      if (dialog.ShowDialog(this) == DialogResult.OK) {
-        if (ProgrammableOperator.GetVariableInfo(dialog.VariableInfo.FormalName) != null) {
-          Auxiliary.ShowErrorMessageBox("A variable info with the same formal name already exists.");
-        } else {
-          ProgrammableOperator.AddVariableInfo(dialog.VariableInfo);
-          Recompile();
-        }
-      }
-      dialog.Dispose();
-    }
-
-    private void removeVariableInfoButton_Click(object sender, EventArgs e) {
-      IVariableInfo[] selected = new IVariableInfo[operatorBaseVariableInfosView.SelectedVariableInfos.Count];
-      operatorBaseVariableInfosView.SelectedVariableInfos.CopyTo(selected, 0);
-      for (int i = 0; i < selected.Length; i++)
-        ProgrammableOperator.RemoveVariableInfo(selected[i].FormalName);
-      Recompile();
-    } */
 
     private void Recompile() {
@@ -170,5 +125,4 @@
       }
       OnContentChanged();
-      codeEditor.ShowCompileErrors(ProgrammableOperator.CompileErrors, "ProgrammableOperator");
       this.Enabled = true;
     }
@@ -184,4 +138,7 @@
     private void ProgrammableOperator_DescriptionChanged(object sender, EventArgs e) {
       descriptionTextBox.Text = ProgrammableOperator.Description;
+    }
+    private void ProgrammableOperator_SignatureChanged(object sender, EventArgs args) {
+      codeEditor.Prefix = GetGeneratedPrefix();
     }
     #endregion
@@ -317,4 +274,8 @@
     }
 
+    private void descriptionTextBox_TextChanged(object sender, EventArgs e) {
+      ProgrammableOperator.SetDescription(descriptionTextBox.Text);
+    }
+
 
   }
Index: trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.resx
===================================================================
--- trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.resx	(revision 2877)
+++ trunk/sources/HeuristicLab.Operators.Programmable/3.3/ProgrammableOperatorView.resx	(revision 2897)
@@ -118,14 +118,8 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="splitContainer1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
   </metadata>
-  <metadata name="splitContainer2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </metadata>
-  <metadata name="groupBox1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>False</value>
-  </metadata>
-  <metadata name="groupBox2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="tabPage2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
