Index: /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ReferenceParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ReferenceParameter.cs	(revision 17693)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ReferenceParameter.cs	(revision 17694)
@@ -110,4 +110,19 @@
     }
 
+    // TODO: Remove
+    //protected void ChangeReference(IValueParameter newReference, bool retainData) {
+    //  IItem oldValue = Value;
+    //  var oldRef = ReferencedParameter;
+    //  oldRef.ToStringChanged -= (o, e) => OnToStringChanged();
+    //  oldRef.ItemImageChanged -= (o, e) => OnItemImageChanged();
+    //  if (valueChanged != null) oldRef.ValueChanged -= OnReferencedParameterValueChanged;
+    //  newReference.ToStringChanged += (o, e) => OnToStringChanged();
+    //  newReference.ItemImageChanged += (o, e) => OnItemImageChanged();
+    //  if (valueChanged != null) newReference.ValueChanged += OnReferencedParameterValueChanged;
+    //  ReferencedParameter = newReference;
+    //  oldRef.Value = (IItem)oldValue.Clone(); // This is problematic, e.g. FixedValueParameter !!! But necessary, otherwise the value holds reference to the old parameter
+    //  if (retainData) Value = oldValue;
+    //}
+
 
     #region event handlers
@@ -128,4 +143,6 @@
     private void OnReferencedParameterValueChanged(object sender, EventArgs args) {
       valueChanged?.Invoke(this, args); // note "this", not "sender" as sender would be the referenced parameter
+      OnItemImageChanged();
+      OnToStringChanged();
     }
 
@@ -166,4 +183,9 @@
       return new ReferenceParameter<T>(this, cloner);
     }
+
+    // TODO: Remove
+    //public void ChangeReference(IValueParameter<T> newParameter, bool retainData) {
+    //  base.ChangeReference(newParameter, retainData);
+    //}
   }
 
@@ -193,4 +215,9 @@
       return new ReferenceParameter<T, U>(this, cloner);
     }
+
+    // TODO: Remove
+    //public void ChangeReference(IValueParameter<U> newParameter, bool retainData) {
+    //  base.ChangeReference(newParameter, retainData);
+    //}
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 17693)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 17694)
@@ -21,5 +21,4 @@
 
 using System;
-using System.ComponentModel;
 using System.Drawing;
 using System.Linq;
@@ -187,4 +186,7 @@
     protected override void OnEncodingChanged() {
       base.OnEncodingChanged();
+      var jobData = (ItemList<Job>)JobData.Clone();
+      var jobs = Jobs;
+      var resources = Resources;
       Parameters.Remove(JobDataParameter);
       Parameters.Add(JobDataParameter = new ReferenceParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", Encoding.JobDataParameter));
@@ -193,22 +195,21 @@
       Parameters.Remove(ResourcesParameter);
       Parameters.Add(ResourcesParameter = new ReferenceParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", Encoding.ResourcesParameter));
+      JobData = jobData;
+      Jobs = jobs;
+      Resources = resources;
+
+      RegisterEventHandlers();
     }
 
 
     private void RegisterEventHandlers() {
-      JobDataParameter.ValueChanged += JobDataParameterOnValueChanged;
-      JobData.PropertyChanged += JobDataOnPropertyChanged;
-    }
-
-    private void JobDataParameterOnValueChanged(object sender, EventArgs e) {
-      JobData.PropertyChanged += JobDataOnPropertyChanged;
+      ItemListParameterChangeHandler<Job>.Create(JobDataParameter, JobDataOnChanged);
+    }
+
+    private void JobDataOnChanged() {
       Jobs = JobData.Count;
-    }
-
-    private void JobDataOnPropertyChanged(object sender, PropertyChangedEventArgs e) {
-      if (e.PropertyName == nameof(JobData.Count)) {
-        Jobs = JobData.Count;
-      }
-    }
+      Resources = JobData.SelectMany(x => x.Tasks).Select(x => x.ResourceNr).Distinct().Count();
+    }
+
 
     #region Problem Instance Handling
